场景
数据库中有一个字段(time)记录这条数据产生的时间,现在需要一个接口,返回某一天产生的所有数据。
参数个数的坑
接收两个参数并使用
在数据访问层,可以接收两个参数,但是不能用,一旦用了就出错:
接收两个参数但是不用
接收参数,并且 SQL 语句没有错误,是可以查询到数据的。
两种情况不同之处:前者使用了传递过来的参数,后者直接把字符串写上去。
所以我一直以为是我传递过来的参数有问题,也想过是不是参数类型的问题?
改了很久….
解决方法
1 | "SELECT * FROM find WHERE time BETWEEN #{time1} AND #{time2}") ( |
简单来说,就是在形参前面加了一个注解:@Param。。。
是否需要加引号的坑
- 直接在 SQL 语句中写日期:需要用单引号包起来
- 如果在 SQL 中 #{time},那么 time 引用的字符串就不需要加单引号
其他
- 利用 IDEA 创建实体类时:使用 java.util.Date 类型,方便设置日期
1 | log.setTime(new Date()); |
- 数据库 time 字段的类型为:datetime。如果是 date 就不会精确到几点几分几秒。
- 修改数据库的时区,免得跟本地时间不同
使用的接口
- 接收的 num 为 0 表示今天,为 1 就表示前一天。
- 通过 SimpleDateFormat 格式化时间成:2018-11-30 这样的格式。
1 | "find_day") ( |
- 拼接字符串是用于 SQL 查询,查询某一天的语句:
1 | SELECT * FROM find WHERE TIME BETWEEN "2018-11-30 00:00:00" AND "2018-11-30 23:59:59" |
总结
因为一个注解浪费了一个多小时的时间。
另外查询方法也很不优雅。